home *** CD-ROM | disk | FTP | other *** search
/ Aminet 7 / Aminet 7 - August 1995.iso / Aminet / comm / tcp / AmiMsgWin.lha / amimsgd / amimsgd.c < prev    next >
C/C++ Source or Header  |  1993-12-22  |  3KB  |  126 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5. #include <netdb.h>
  6. #include <sys/types.h>
  7. #include <sys/syslog.h>
  8. #include <netinet/in.h>
  9. #include <lineread.h>
  10.  
  11. //#include <intuition/intuition.h>
  12.  
  13. #include <proto/dos.h>
  14. #include <proto/exec.h>
  15. //#include <proto/intuition.h>
  16.  
  17. char VersionTag[]="\0$VER: JoranAmimsgd 1.0 (14.12.93)";
  18.  
  19. struct AmiMsg {
  20.     struct MinNode am_Node;
  21.     char *am_user;
  22.     char *am_host;
  23.     char *am_msg;
  24.     struct sockaddr_in am_addr;
  25.     time_t am_time;
  26. };
  27.  
  28. struct AmiMsgMsg {
  29.     struct Message amm_Msg;
  30.     struct AmiMsg amm_AmiMsg;
  31. };
  32.  
  33. #define PORTNAME "JoranAmiMsgWin"
  34.  
  35. char user[15];
  36. char host[20];
  37. char msg[128];
  38. char Title[80];
  39.  
  40. struct sockaddr_in his_addr;
  41. long addrlen;
  42. struct LineRead lr;
  43.  
  44. extern long server_socket;
  45. long gethostname(char *,long len);
  46.  
  47. void main(void)
  48. {
  49.     fd_set readfds;
  50.     int length,i;
  51.     struct AmiMsgMsg amm;
  52.     struct MsgPort *ReplyPort,*AmiMsgWinPort;
  53.     
  54.     if(server_socket==-1) exit(20);
  55.     
  56.     SetProgramName("JoranAmiMsgd");
  57.     
  58.     addrlen = sizeof (his_addr);
  59.     if(getpeername(0,(struct sockaddr *)&his_addr, &addrlen)<0) exit(20);
  60.     
  61.     // drie regels ophalen van het formaat
  62.     // HOST hostname:20
  63.     // USER username:10
  64.     // MSG message:40
  65.     
  66.     initLineRead(&lr,server_socket,RL_LFREQNUL,160);
  67.     FD_ZERO(&readfds);
  68.     
  69.     i=0;
  70.     while((i&7)!=7)
  71.     {
  72.         FD_SET(server_socket,&readfds);
  73.         if(select(server_socket+1,&readfds,NULL,NULL,NULL)<0) exit(20);
  74.         if(FD_SET(server_socket,&readfds))
  75.         {
  76.             length=lineRead(&lr);
  77.             if(length==-1) exit(20);
  78.             if(lr.rl_Line)
  79.             {
  80.                 if(!strncmp("HOST ",lr.rl_Line,5))
  81.                 {    
  82.                     strncpy(host,lr.rl_Line+5,sizeof(host));
  83.                     host[sizeof(host)-1]='\0';
  84.                     i|=1;
  85.                 }
  86.                 if(!strncmp("USER ",lr.rl_Line,5))
  87.                 {
  88.                     strncpy(user,lr.rl_Line+5,sizeof(user));
  89.                     user[sizeof(user)-1]='\0';
  90.                     i|=2;
  91.                 }
  92.                 if(!strncmp("MSG ",lr.rl_Line,4))
  93.                 {
  94.                     strncpy(msg,lr.rl_Line+4,sizeof(msg));
  95.                     msg[sizeof(msg)-1]='\0';
  96.                     i|=4;
  97.                 }
  98.             }
  99.         }        
  100.     }
  101.     CloseSocket(server_socket);
  102.  
  103.     AmiMsgWinPort=NULL;
  104.     if(ReplyPort=CreatePort(NULL,0))
  105.     {
  106.         amm.amm_AmiMsg.am_user=user;
  107.         amm.amm_AmiMsg.am_host=host;
  108.         amm.amm_AmiMsg.am_msg=msg;
  109.         memcpy(&amm.amm_AmiMsg.am_addr,&his_addr,sizeof(struct sockaddr_in));
  110.         amm.amm_AmiMsg.am_time=time(0);
  111.         
  112.         amm.amm_Msg.mn_ReplyPort=ReplyPort;
  113.         
  114.         Forbid();
  115.         AmiMsgWinPort=FindPort(PORTNAME);
  116.         if(AmiMsgWinPort) PutMsg(AmiMsgWinPort,(struct Message *)&amm);
  117.         Permit();
  118.         
  119.         if(AmiMsgWinPort) WaitPort(ReplyPort);
  120.         
  121.         DeletePort(ReplyPort);
  122.     }
  123.     if(!AmiMsgWinPort)
  124.         syslog(LOG_INFO,"%s@%s(%s): %s",user,host,inet_ntoa(his_addr.sin_addr),msg);
  125. }
  126.